using System;
using System.Collections.Generic;
using System.Text;

namespace ReportMaintenanceUtility
{
	public class ChangeLog
	{
		#region PRIVATE MEMBERS
		private ChangeType _type = ChangeType.Undefined;
		private object _originalValue = null;
		private object _newValue = null;
		private List<ChangeLog> _relatedChanges = null;
		#endregion

		#region PUBLIC PROPERTIES
		public ChangeType Type
		{
			get { return this._type; }
		}
		public object OriginalValue
		{
			get { return this._originalValue; }
		}
		public object NewValue
		{
			get { return this._newValue; }
		}
		public List<ChangeLog> RelatedChanges
		{
			get { return this._relatedChanges; }
		}
		#endregion

		#region CONSTRUCTOR(S)
		public ChangeLog(ChangeType type, object originalValue, object newValue)
		{
			this._type = type;
			this._originalValue = originalValue;
			this._newValue = newValue;
			this._relatedChanges = new List<ChangeLog>();
		}
		#endregion
	}

	public enum ChangeType
	{
		Undefined,

		DataSetReferenceAdd,
		DataSetReferenceChange,
		DataSetReferenceDelete,

		DataSetReferenceLabelFieldChange,
		DataSetReferenceValueFieldChange,
		DataSetReferenceTargetChange,

		DataSetName,
		DataSetQueryChange,
		DataSetQueryAdd,
		DataSetQueryDelete,
		QueryCommandText,
		QueryCommandType,

		DataSourceName,

		ParameterName,
		ParameterDataType,
		ParameterPrompt,
		ParameterHidden,
		ParameterInternal,
		ParameterMultiValue,
		ParameterAllowBlank,
		ParameterNullable,
		
		ValidValuesAdd,
		ValidValuesChange,
		ValidValuesDelete,

		ParameterValueListAdd,
		ParameterValueListChange,
		ParameterValueListDelete,

		ParameterValueChange,

		DefaultValuesAdd,
		DefaultValuesChange,
		DefaultValuesDelete,

		DefaultValueListAdd,
		DefaultValueListDelete,
		DefaultValueListChange,

		DefaultValueChange
	}
}
